package com.ov3rk1ll.kinocast.ui; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.media.MediaPlayer; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.view.MotionEvent; import android.view.View; import android.widget.FrameLayout; import android.widget.VideoView; import com.ov3rk1ll.kinocast.R; import com.ov3rk1ll.kinocast.ui.util.CustomMediaController; import com.ov3rk1ll.kinocast.ui.util.SystemUiHider; /** * An example full-screen activity that shows and hides the system UI (i.e. * status bar and navigation/system bar) with user interaction. * * @see SystemUiHider */ public class PlayerActivity extends Activity { private static final boolean AUTO_HIDE = true; private static final int AUTO_HIDE_DELAY_MILLIS = 3000; private static final boolean TOGGLE_ON_CLICK = true; private static final int HIDER_FLAGS = SystemUiHider.FLAG_HIDE_NAVIGATION; private SystemUiHider mSystemUiHider; private Uri mVideoUri; private CustomMediaController mMediaController; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_player); mVideoUri = getIntent().getData(); final View controlsView = findViewById(R.id.fullscreen_content_controls); mMediaController = new CustomMediaController(this); mSystemUiHider = SystemUiHider.getInstance(this, getWindow().getDecorView(), HIDER_FLAGS); mSystemUiHider.setup(); mSystemUiHider .setOnVisibilityChangeListener(new SystemUiHider.OnVisibilityChangeListener() { @Override public void onVisibilityChange(boolean visible) { //controlsView.setVisibility(visible ? View.VISIBLE : View.GONE); if (visible) { mMediaController.show(); } else { mMediaController.hide(); } if (visible && AUTO_HIDE) { delayedHide(AUTO_HIDE_DELAY_MILLIS); } } }); // Set up the user interaction to manually show or hide the system UI. controlsView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { if (TOGGLE_ON_CLICK) { mSystemUiHider.toggle(); } else { mSystemUiHider.show(); } } return true; } }); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); final View controlsView = findViewById(R.id.fullscreen_content_controls); final VideoView videoView = (VideoView) findViewById(R.id.fullscreen_content); videoView.setVideoURI(mVideoUri); final FrameLayout decor = (FrameLayout) getWindow().getDecorView(); final View videoProgressView = View.inflate(getApplicationContext(), R.layout.video_loading_progress, null); decor.addView(videoProgressView); videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { decor.removeView(videoProgressView); videoView.setMediaController(mMediaController); mMediaController.setAnchorView(controlsView); } }); videoView.setOnErrorListener(new MediaPlayer.OnErrorListener() { @Override public boolean onError(MediaPlayer mp, int what, int extra) { (new AlertDialog.Builder(PlayerActivity.this)) .setTitle(getString(R.string.player_error_dialog_title)) .setMessage(getString(R.string.player_unsupported_format) + "\n\n(#" + what + "E" + extra + ")") .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish(); } }) .show(); return true; } }); videoView.start(); delayedHide(100); } Handler mHideHandler = new Handler(); Runnable mHideRunnable = new Runnable() { @Override public void run() { mSystemUiHider.hide(); } }; /** * Schedules a call to hide() in [delay] milliseconds, canceling any * previously scheduled calls. */ private void delayedHide(int delayMillis) { mHideHandler.removeCallbacks(mHideRunnable); mHideHandler.postDelayed(mHideRunnable, delayMillis); } }